package com.zwh.se.concurrency.cas;

import java.util.concurrent.atomic.AtomicInteger;

/**
 * CAS是Java中的一种并发控制技术，全称为Compare and Swap，即比较并交换。
 * CAS操作包含三个参数：内存位置V、预期值A和新值B。当且仅当内存位置V的值等于预期值A时，CAS操作才会将内存位置V的值修改为新值B，否则不执行任何操作。
 * CAS操作是一种无锁的非阻塞算法，因为它不需要像传统的锁机制一样通过阻塞来保证多线程之间的同步和互斥。相反，CAS利用底层硬件提供的原子性操作来实现多线程之间的同步和互斥，从而避免了锁带来的性能损失和死锁等问题。
 * 在Java中，CAS操作主要应用于并发编程中的原子操作，例如对于一个计数器变量，我们可以使用CAS操作来保证它的自增操作是原子性的，从而避免多线程之间的竞争和冲突。
 * Java中提供了AtomicInteger、AtomicBoolean、AtomicLong等类，它们都是基于CAS操作实现的。
 */
public class CASDemo {
    public static void main(String[] args) {
       checkCAS();
    }

    public static void checkCAS(){
        AtomicInteger atomicInteger = new AtomicInteger(5);
        System.out.println(atomicInteger.compareAndSet(5, 2019) + "\t current data is " + atomicInteger.get());
        System.out.println(atomicInteger.compareAndSet(5, 2014) + "\t current data is " + atomicInteger.get());
    }
}
